package com.lx.javasunmmrize.SingletonDemo;

/**
 * @Description 静态内部类(根据JVM类加载机制:线程安全的),推荐使用
 *
 * 类的静态属性只会在第一次加载类的时候初始化,在类进行初始化的时候,别的线程是无法进入的
 *
 * 优点:1.外部类加载的时候,静态内部类不会被加载
 *      2.当调用getInstance()时,会去加载内部类,而 内部类加载是线程安全的
 * @Author lx
 * @Date 2021/2/23 22:31
 **/
public class SingletonTest06 {

    public static void main(String[] args) {
        Singleton06 instanc = Singleton06.getInstance();
        Singleton06 instanc2 = Singleton06.getInstance();
        System.out.println(instanc == instanc2);
        System.out.println(instanc.hashCode());
        System.out.println(instanc2.hashCode());
    }

}


class Singleton06{
    private Singleton06(){}

//    private static volatile  Singleton06 instance;

    //静态内部类
    private static  class  SingletonInstance{
        private static final Singleton06 INSTANCE = new Singleton06();
    }

    //调用静态内部类的属性时才会加载静态内部类
    public static synchronized Singleton06 getInstance(){
        return SingletonInstance.INSTANCE;
    }


}
